Bibliothek: Mechatronics
Tipp
Die Bibliothek Mechatronics ist als Beispiel gedacht für eine einfache (und auch nicht vollständige) Implementierung einer mechatronischen Einheit mit sequentiellem Ablauf. Sie erfüllt nicht alle Anforderungen, die eine komplette mechatronische Applikation haben könnte. Sie soll vielmehr ein Einstieg oder eine Basis für eine Applikation solchen Typs sein.
Das Kernstück des vorgestellten Mechatronic-Modells basiert auf der folgenden Modulstruktur:
Mechatronics
Es wird bei jeder Maschine angenommen, dass sie aus mehreren mechantronischen Unterbaugruppen, welche beispielsweise jeweils einen Greifer repräsentieren, bestehen kann. Eine Unterbaugruppe wiederum teilt sich auf in seine Aktuatoren (bestehend aus der mechatronischen Einheit selbst, aber auch aus ihrer funktionellen Implementierung oder E/A-Verwaltung) und einem Programm-Manager. Der Programm-Manager soll die verschiedenen Zustände einer mechatronischen Unterbaugruppe verwalten, wie beispielsweise seinen Idle- oder Execute-Zustand. Schlußendlich werden diese Zustände in der Bibliothek durch Programmabläufe repräsentiert, welche die Aktoren bewegen oder andere notwendige Funktionen ausführen.
An dieser Stellen sollen kurz die verschiedenen Teile im Detail beschrieben werden. Bei der Verwendung der Bibliothek wird es in vielen Fällen notwendig sein, eigene Aktoren, Ablaufschritte oder Programmsequenzen zu implementieren, was hier ebenfalls erklärt werden soll.
Aktoren Alle Module, cie Aktoren sein sollen, müssen von einem Funktionsbaustein implementiert werden, der seinerseits das Interface
IActuatorimplementiert. Dieses Interface hat keine Methoden oder Eigenschaften und wird nur aus Gründen der Modulkompatibilität verwendet (siehe dazu die Dokumentation vonIActuatorin der Bibliothek). Für Implementierungen von Aktoren gibt es keine Regeln oder Einschränkungen, so dass die Bewegung oder Aktivierung eines solchen Aktors separat gemacht werden muss. Dies wird normalerweise durch die Implementierung eines Ablaufschritt-Moduls realisiert, welches Aktoren in einem Referenz-Steckplatz aufnehmen kann und sie dann als Teil eines Ablaufs in der gewünschten Art bewegen kann (beispielsweise durch die Verwendung zusätzlicher Interfaces realisiert).Ablaufschritte
Es wird dringend empfohlen, die Implementierung von Ablaufschritten als abgeleitete Klassen des Funktionsbausteins
StepBaseauszuführen. Dieser stellt alle notwendigen Basisimplementierungen des InterfacesIProgramSequenceStepzur Verfügung. Siehe dazu die Dokumentation vonIActuatorin der Bibliothek. Bei der Verwendung der BasisklasseStepBaseist es dann nur noch notwendig die MethodeExecutezu implementieren. Letztere wird dann vom Programmablauf zyklisch so lange aufgerufen, bis die VariablexDoneder Basisklasse aufTRUEgesetzt wird. Zusätzlich sollte, solange der jweilige Ablaufschritt aktiv ist, das FlagxActiveaufTRUEgesetzt werden. Die Verbindung zu Aktoren kann dann in beliebiger Weise implementiert werden (beispielsweise durch den vorgeschlagenen Referenz-Steckplatz (siehe 1.)Programmsequenz / Programm-Manager Eine Programmsequenz ist ein Submodul eines Programm-Managers, welche einen Zustand darstellt. Diese Zustände werden in Form einer OMAC-Status-Maschine verwaltet. Ihre Implementierungen basieren wieder auf der Methode „Execute“ (für Details , siehe die Implementierung in der Bibliothek). Die Implementierung eines solchen Programmablauf durch den Anwender ist jedoch in den meisten Fällen nicht notwendig. Die Art und Weise, wie das Verhalten der Status-Maschine im Programm-Manager implementiert ist und dadurch die Programmabläufe ausführt, soll jedoch hier kurz beschrieben werden:
Es gibt zwei Arten von Status: Ausführende Status (Endung „ing“) und wartende/duale Status (restliche). Die wartenden Status werden durch externe Befehle beendet, wohingegen die ausführenden Status nach der Ausführung beendet werden. Die verfügbaren Befehle hängen von dem Status ab, in welchem der Programm-Manager gerade steht. Das OMAC-Status-Diagramm gibt dazu einen kleinen Überblick.
Abbildung 66. OMAC Diagramm
Abbildung 67. ModulMovableBarrier
Das Modul
MovableBarrierist folgendermaßen implementiert: Der zugehörige FunktionsbausteinMovableBarrierimplementiert das erzeugte InterfaceIMovableBarrier. Dieses Interface definiert Methoden zum Bewegen einer (bildlichen) Schutzhaube, wobeiIMovableBarrierseinerseits das InterfaceIActuatorimplementiert, so dass das ModulMovableBarrierals Aktor im Modulbaum unterhalb einer mechatronischen Baugruppe eingesetzt werden kann:Abbildung 68. Implementierung des ModulsMovableBarrier
Dieser Aktuator „MovableBarrier“ wird durch das Ablaufschritt-Modul
MoveBarrierForTimebewegt, welches seinerseits in der folgenden Art und Weise implementiert ist:Abbildung 69. Implementierung des ModulsMoveBarrierForTime
Der das Modul implementierende Funktionsbaustein
MoveBarrierForTimeleitet einfach von dem BasisfunktionsbausteinAC_MEC.StepBaseab, welcher in der Bibliothek enthalten ist. Dadurch implementiert der FunktionsbausteinMoveBarrierForTimebereits das InterfaceIProgramSequenceStep. Folglich kann das ModulMoveBarrierForTimeals Ablaufschritt unter einem Programmablauf eingefügt werden. Die funktionelle Implementierung des FunktionsbausteinsMoveBarrierForTimegeschieht folgendermaßen: Durch die Definition eines Referenz-Steckplatzes für das ModulMoveBarrierForTime, welcher einen Aktor mit implementiertem InterfaceIMovableBarrieraufnehmen kann, bekommt dieser eine Verbindung zu einem bestehenden „MovableBarrier“-Aktuator. Die Bewegung dieses Aktors erfolgt schließlich in der FunktionExecutedes FunktionsbausteinsMoveBarrierForTime, welcher einfach die Methode zum (bildlichen) Bewegen der Schutzhaube aufruft. Diese Methode wird durch den referenzierten Aktuator, welcherIMovableBarrierimplementiert, zur Verfügung gestellt. Weiterhin ist die EigenschaftDoneund die VariablexActivemit einem TON gekoppelt, so dass der „Bewegungs“-FunktionsbausteinIMovableBarriersolange zyklisch aufgerufen wird, bis eine vorgegebene Zeit (TON) abgelaufen ist und danachDoneauf TRUE undxActiveauf FALSE gesetzt wird. Die EigenschaftDoneist Teil des InterfacesIProgramSequenceStepund meldet deshalb dem übergeordneten Programmablauf dass der nächste Ablaufschritt ausgeführt werden soll.Abgesehen von eigenen Implementierungen von Ablaufschritten stellt die
AC_Mechatronics.libraryeinige vorimplementierte Schritte zur Verfügung, welche für allgemeine logische Operationen verwendet werden können. Es wird zum Beispiel ein SchrittBranchOnBoolbereitgestellt, welcher zwei Unterschritte/-zweige beinhaltet. Diese Unterschritte werden abhängig vom Wert einer booleschen Variable ausgeführt. Darüberhinaus sind in der BibliothekAC_Mechatronics.libraryAblaufschritte für parallele Abläufe, bedingte Sprünge oder einfache Warteschritte und viele weitere Aufgaben vorhanden.